﻿using PortalBusiness.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;



namespace PortalBusiness.Controllers
{
    public class UsuariosController : Controller
    {
        private PortalBusinessContext db = new PortalBusinessContext();

        // GET: Usuarios
        public ActionResult Cadastro()
        {
            return View();
        }

        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Index", "Caixa");
        }


        [HttpPost]
        public ActionResult Cadastro(USUARIO usuario)
        {

            if (db.USUARIOs.Where(u => u.LOGIN == usuario.LOGIN).Count() > 0)
                ModelState.AddModelError("LOGIN", "Este email ja foi cadastrado!");

            if (ModelState.IsValid)
            {
                if (usuario.LOGIN == "romadier@gmail.com")
                {
                    usuario.STATUS = 1;
                    usuario.CODIGO_LOJA = "LJ";
                    usuario.CODIGO_NEGOCIO = "NE";
                }
                db.USUARIOs.Add(usuario);
                db.SaveChanges();
                Emails.Emails.EnviarSolicitacao(usuario.LOGIN);
                return RedirectToAction("SucessoCasdastro", "Usuarios", new {id=usuario.USUARIOID });
            }
            return View(usuario);

        }

        public ActionResult SucessoCasdastro(int? id)
        {
            USUARIO usuario = db.USUARIOs.Find(id);
            return View(usuario);
        }

        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(USUARIO usu)
        {
            string login = usu.LOGIN;
            USUARIO usuario = db.USUARIOs.Where(u => u.LOGIN == login).FirstOrDefault();
            foreach (var modelValue in ModelState.Values)
            {
                modelValue.Errors.Clear();
            }

            if (usuario == null)
                ModelState.AddModelError("LOGIN", "Email não encontrado!");
            else if (usuario.SENHA != usu.SENHA)
                ModelState.AddModelError("SENHA", "Senha invalida!");
            else if (usuario.STATUS != 1 || ( usuario.VALIDADE_SENHA != null && usuario.VALIDADE_SENHA.Value < DateTime.Today ))
                ModelState.AddModelError("LOGIN", "Usuário não está ativo!");

            if (ModelState.IsValid)
            {
                var authTicket = new FormsAuthenticationTicket(1, usuario.LOGIN, DateTime.Now, DateTime.Now.AddMinutes(30), true,
                                                                    "regra");
                string cookieContents = FormsAuthentication.Encrypt(authTicket);
                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieContents)
                {
                    Expires = authTicket.Expiration,
                    Path = FormsAuthentication.FormsCookiePath
                };
                Response.Cookies.Add(cookie);

                return RedirectToAction("Index","Caixa");
            }
            return View(usu);
            
        }

        public ActionResult RecuperarAcesso()
        {
            return View();
        }

        [HttpPost]
        public ActionResult RecuperarAcesso(string Email)
        {
            USUARIO usuario = db.USUARIOs.Where(u => u.LOGIN == Email).FirstOrDefault();
            if (usuario == null)
            {
                ModelState.AddModelError("Email", "Email não encontrado!");
                return View();
            }

            if (usuario.STATUS == 1 && (usuario.VALIDADE_SENHA == null || usuario.VALIDADE_SENHA.Value >= DateTime.Today )) 
            {
                if (Emails.Emails.EnviarLembreteSenha(usuario.LOGIN, usuario.SENHA))
                    return RedirectToAction("LembreteSenhaEnviado");
                else 
                    return View();
            } 
            else
            {
                if (Emails.Emails.EnviarSolicitacao(usuario.SENHA)){
                    db.Database.ExecuteSqlCommand("Update USUARIO set STATUS = 2 where USUARIOID = " + usuario.USUARIOID.ToString());
                    db.SaveChanges();
                    return RedirectToAction("SolicitacaoEnviada");
                }
                else
                    return View();
            }


        }

        public ActionResult LembreteSenhaEnviado()
        {
            return View();
        }

        public ActionResult SolicitacaoEnviada()
        {
            return View();
        }

    }
}